home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Directorty Opus 5 - Magellan 2
/
Opus 5 - Magellan 2.iso
/
Archiv
/
Install_3.3.lha
/
Install_3.3
/
ARexx
/
Install_Scan.dopus5
< prev
next >
Wrap
Text File
|
1997-05-09
|
4KB
|
160 lines
/* $VER: Install_Scan.dopus5 3.1 (09.05.97) © Frédéric Steinfels
*/
Init:
signal on BREAK_C
signal on BREAK_D
signal on BREAK_E
signal on BREAK_F
signal on HALT
signal on IOERR
signal on SYNTAX
signal on FAILURE
options failat 21
options results
parse arg arguments
ProgramName = "Install_Scan.dopus5";
ArgsTemplate = "PORT/A,MNPORT/A,MYPORT/A,MYID/A,HANDLE/A,LPATH/A"
lf='0a'x
if strip(arguments) = '?' then do
Call WriteCh(STDOUT, ArgsTemplate || ': ')
pull arguments
end; else nop
if ~ReadArgs(arguments,ArgsTemplate) then do
say Fault(RC,ProgramName)
exit 10
end; else nop
drop arguments
catalog=opencatalog('Install.dopus5.catalog','english',0)
address value PORT
MYPORTH=openport(MYPORT)
nump=1
lister query handle numselentries
cnt=result
do while cnt>0
lister query handle firstsel
dat=result
lister select handle dat 0
lister query handle entry dat stem file
if file.date<0 then do
dopus request '"DirectoryOpus sent an invalid date for' || lf || file.name || ':' file.date
file.date=0 /* This happens sometimes, most likely if date < 1987 */
end
if file.type<0 then do
file.comment=TRANSLATE(file.comment,' ','a0'x)
dopus send MNPORT MYID || 2 || file.name || lf || nump || lf || file.size || lf || file.date || lf || file.comment
end
if file.type>0 then do
dopus send MNPORT MYID || 1 || file.name || lf || nump
end
cnt=cnt-1
end
dopus send MNPORT MYID || 3 || nump
do until CMD='0'
call waitpkt(MYPORT)
Packet=getpkt(MYPORT)
if Packet ~= null() then do
ln = getarg(Packet,0)
ID=substr(ln,1,1)
CMD=substr(ln,2,1)
ARG=substr(ln,3)
call CheckArg
IF ID=0 THEN DO
IF CMD=1 THEN DO
parse var arg path '0a'x nump
lister read handle '"' || makepath(lpath,path) || '"' force
lister wait handle quick
lister query handle numentries
cnt=result-1
do while cnt>=0
lister query handle entry # || cnt stem file
if file.type<0 then do
file.comment=TRANSLATE(file.comment,' ','a0'x)
dopus send MNPORT MYID || 2 || file.name || lf || nump || lf || file.size || lf || file.date || lf || file.comment
end
if file.type>0 then do
dopus send MNPORT MYID || 1 || file.name || lf || nump
end
cnt=cnt-1
end
dopus send MNPORT MYID || 3 || nump
end
IF CMD=2 THEN DO
Call CleanUP
exit
end
end
end
end
exit
CheckArg:
IF DATATYPE(ID)~='NUM' | DATATYPE(CMD)~='NUM' THEN Call CheckArgFail
IF ID~=0 THEN Call CheckArgFail
IF CMD>2 THEN Call CheckArgFail
RETURN
CheckArgFail:
address value PORT
dopus request '"' || GetCatStr(18,'Error in') ProgramName || lf || GetCatStr(61,'Port') MYPORT || lf || GetCatStr(52,'Invalid packet received') || lf || 'ID=' || ID || lf || 'CMD=' || CMD || lf || 'ARG=' || ARG || '"' GetCatStr(0,'Abort')
Call BREAK
exit
ERROR:
HALT:
IOERR:
SYNTAX:
IF RC ~= 0 THEN DO
dopus request cnt
dopus request result
line=sigl
text=errortext(rc)
dopus request '"' || GetCatStr(18,'Error in') ProgramName || lf || GetCatStr(61,'Port') MYPORT || lf || text || lf || GetCatStr(19,'Line') line || '"' GetCatStr(0,'Abort')
END
else do
dopus request '"' || GetCatStr(18,'Error in') ProgramName || lf || GetCatStr(61,'Port') MYPORT || '"' GetCatStr(0,'Abort')
end
BREAK_C:
BREAK_D:
BREAK_E:
BREAK_F:
BREAK:
dopus send MNPORT MYID || 0
Call CleanUP
exit
CleanUp:
if POS(MYPORT,SHOW('p'))~=0 then do
Call FORBID()
Call ClosePort(MYPORTH)
Call PERMIT()
end
Call CloseCatalog(catalog)
return
getcatstr: /* Thank you for this procedure, Edmund */
parse arg msgno,msgstring
if catalog~=0 then
msgstring=getcatalogstr(catalog,msgno,msgstring)
do i=3 to arg()
parse var msgstring fore '%s' aft
msgstring=fore||arg(i)||aft
end
return msgstring